home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Format CD 52
/
Amiga Format AFCD52 (Issue 136, May 2000).iso
/
-serious-
/
programming
/
other
/
mesa
/
mesa-glut
/
src-glut.aos
/
glutinit.c
< prev
next >
Wrap
C/C++ Source or Header
|
2000-02-23
|
6KB
|
215 lines
/*
* Amiga GLUT graphics library toolkit
* Version: 1.1
* Copyright (C) 1998 Jarno van der Linden
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/*
* glutInit.c
*
* Version 1.0 27 Jun 1998
* by Jarno van der Linden
* jarno@kcbbs.gen.nz
*
* Version 1.1 02 Aug 1998
* by Jarno van der Linden
* jarno@kcbbs.gen.nz
*
* - Added quantizer plugin arguments
*
*/
#include <string.h>
#include <inline/intuition.h>
#include <intuition/screens.h>
#include "glutstuff.h"
int Limit(int v, int minv, int maxv)
{
if (v < minv)
return (minv);
if (v > maxv)
return (maxv);
return (v);
}
void RemoveArg(int n, int *argc, char **argv)
{
int t;
char *p;
p = argv[n];
for (t = n; t < ((*argc) - 1); t++) {
argv[t] = argv[t + 1];
}
argv[(*argc) - 1] = p;
(*argc)--;
}
void glutInit(int *argcp, char **argv)
{
int t;
char *geometrystring = 0;
struct Screen *screen;
CurrentTime(&(glutstuff.basetime_secs), &(glutstuff.basetime_micros));
glutstuff.havebasetime = TRUE;
for (t = (*argcp) - 1; t >= 1; t--) {
if (!stricmp(argv[t], "-pubscreen")) {
if (t < ((*argcp) - 1)) {
glutstuff.pubscreenname = argv[t + 1];
RemoveArg(t, argcp, argv);
RemoveArg(t, argcp, argv);
}
}
else if (!strcmp(argv[t], "-display")) {
DEBUGOUT(1, "%s option invalid for amigaos glut.\n", argv[t]);
if (t < ((*argcp) - 1))
RemoveArg(t, argcp, argv);
RemoveArg(t, argcp, argv);
}
else if (!strcmp(argv[t], "-direct") ||
!strcmp(argv[t], "-indirect") ||
!strcmp(argv[t], "-sync")) {
DEBUGOUT(1, "%s option invalid for amigaos glut.\n", argv[t]);
RemoveArg(t, argcp, argv);
}
else if (!strcmp(argv[t], "-iconic") ||
!strcmp(argv[t], "-gldebug")) {
RemoveArg(t, argcp, argv);
}
else if (!strcmp(argv[t], "-geometry")) {
if (t < ((*argcp) - 1) && argv[t + 1][0]) {
geometrystring = argv[t + 1];
RemoveArg(t, argcp, argv);
}
RemoveArg(t, argcp, argv);
}
else if (!stricmp(argv[t], "-double")) {
if (t < ((*argcp) - 1)) {
if (!stricmp(argv[t + 1], "on"))
glutstuff.doublemode = 1;
else if (!stricmp(argv[t + 1], "off"))
glutstuff.doublemode = -1;
RemoveArg(t, argcp, argv);
}
RemoveArg(t, argcp, argv);
}
else if (!stricmp(argv[t], "-rgba")) {
if (t < ((*argcp) - 1)) {
if (!stricmp(argv[t + 1], "on"))
glutstuff.rgbamode = 1;
else if (!stricmp(argv[t + 1], "off"))
glutstuff.rgbamode = -1;
RemoveArg(t, argcp, argv);
}
RemoveArg(t, argcp, argv);
}
else if (!stricmp(argv[t], "-stereo")) {
if (t < ((*argcp) - 1)) {
if (!stricmp(argv[t + 1], "on"))
glutstuff.stereomode = 1;
else if (!stricmp(argv[t + 1], "off"))
glutstuff.stereomode = -1;
RemoveArg(t, argcp, argv);
}
RemoveArg(t, argcp, argv);
}
else if (!stricmp(argv[t], "-palmode")) {
if (t < ((*argcp) - 1)) {
if (!stricmp(argv[t + 1], "weighted"))
glutstuff.palmode = AMESA_WEIGHTED_MATCH;
else if (!stricmp(argv[t + 1], "colorshift"))
glutstuff.palmode = AMESA_TRUECOLOR_SHIFT;
else if (!stricmp(argv[t + 1], "colormatch"))
glutstuff.palmode = AMESA_TRUECOLOR_MATCH;
else if (!stricmp(argv[t + 1], "grey"))
glutstuff.palmode = AMESA_GREY_MATCH;
else if (!stricmp(argv[t + 1], "hpcr"))
glutstuff.palmode = AMESA_HPCR_MATCH;
RemoveArg(t, argcp, argv);
}
RemoveArg(t, argcp, argv);
}
}
if (!(screen = LockPubScreen(glutstuff.pubscreenname)))
screen = LockPubScreen(NULL);
if (screen) {
glutstuff.scrwidth = screen->Width;
glutstuff.scrheight = screen->Height;
DEBUGOUT(2, "screen dimensions are %dx%d\n", glutstuff.scrwidth, glutstuff.scrheight);
UnlockPubScreen(NULL, screen);
}
if (geometrystring) {
unsigned char *string = geometrystring, *nextstring;
if ((nextstring = strchr(string, 'x')) || (nextstring = strchr(string, 'X'))) {
*nextstring++ = 0;
glutstuff.initwidth = atoi(string);
DEBUGOUT(2, "geometry initwidth is %s (%d)\n", string, glutstuff.initwidth);
string = nextstring;
}
if (!((*string == '-') || (*string == '+'))) {
char removed;
nextstring = string;
while (!((*nextstring == '-') || (*nextstring == '+') || (*nextstring == '\0')))
nextstring++;
removed = *nextstring;
*nextstring = 0;
glutstuff.initheight = atoi(string);
DEBUGOUT(2, "geometry initheight is %s (%d)\n", string, glutstuff.initheight);
*nextstring = removed;
string = nextstring;
}
if (((*string == '-') || (*string == '+'))) {
char removed;
nextstring = string + 1;
while (!((*nextstring == '-') || (*nextstring == '+') || (*nextstring == '\0')))
nextstring++;
removed = *nextstring;
*nextstring = 0;
glutstuff.initposx = glutstuff.scrwidth - glutstuff.initwidth + atoi(string);
DEBUGOUT(2, "geometry initposx is %s (%d)\n", string, glutstuff.initposx);
*nextstring = removed;
string = nextstring;
}
if (((*string == '-') || (*string == '+'))) {
char removed;
nextstring = string + 1;
while (!((*nextstring == '-') || (*nextstring == '+') || (*nextstring == '\0')))
nextstring++;
removed = *nextstring;
*nextstring = 0;
glutstuff.initposy = glutstuff.scrheight - glutstuff.initheight + atoi(string);
DEBUGOUT(2, "geometry initposy is %s (%d)\n", string, glutstuff.initposy);
*nextstring = removed;
string = nextstring;
}
}
}